// 全局主题上下文接口
interface ThemeHandle {
    // 模式查询
    mode: number,
    // 设置模式
    setThemeMode: (
        // 登陆状态
        state: boolean,
        // 模式数字
        mode: number,
    ) => void
}


// 全局程序上下文用户数据接口
interface info {
    [key: string]: unknown;
}

// 全局程序上下文默认方法接口
interface AppHandle {
    // 标题
    title: string,
    // 设置标题
    setTitle: (title: string) => string,
    // 用户信息
    info: info | null,
    // 设置用户信息
    setUserInfo: (info: info | null) => void,
    // 正则表达式
    Regex: { account: RegExp, email: RegExp }
}


export const AppProviderMethod = {
    // 主题上下文提供函数
    ThemeMethod: (hd: ThemeHandle) => {
        return {mode: hd && hd.mode && hd.mode, setThemeMode: hd && hd.setThemeMode};
    },
    // 全局程序上下文提供函数
    AppMethod: (hd: AppHandle) => {
        // 设置登录信息
        const setUserInfo = (info: info | null) => {
            // 判断值是 null 则删除会话信息
            if (info === null) {
                // 删除会话信息（退出登陆）
                window.sessionStorage.removeItem("SESSION-USER");
                // 删除本地 SESSION 会话（退出登陆）
                window.sessionStorage.removeItem("linked");
                // 设置为空会话（退出登陆）
                if (hd) hd.setUserInfo(null);
                // 退出函数语句，不再执行下部分
                return;
            }
            // 存储登陆会话信息
            window.sessionStorage.setItem("SESSION-USER", JSON.stringify(info));
            // 页面刷新本地会话信息
            if (hd) hd.setUserInfo(info);
        };
        return {
            title: hd && hd.title,
            setTitle: hd && hd.setTitle,
            info: hd && hd.info && hd.info,
            setUserInfo,
            Regex: hd && hd.Regex && hd.Regex
        }
    }
}